/**
 * @brief MCU SRAM/PSRAM/NOR 驱动
 * @author 张勇 41204@qq.com
 * @date 2022-04
 */
 
#pragma once

#include <stdint.h>
#include "stm32f4xx.h"
#include "share/std_err.h"

typedef struct _mcu_sram_nor {
    // SRAM/PSRAM/NOR 句柄
    // !!! 注意大坑: 这里必须把 sdram 定义为静态变量，或全局变量 !
    // 如果定义为局部变量，则会出现很奇葩的问题: 只有 &sdram = 0x20001FF8 时初始化正常，其它的地址都会初始化失败 !!!
    SRAM_HandleTypeDef hsram;
    // SRAM/PSRAM/NOR 时序参数
    FMC_NORSRAM_TimingTypeDef timing;
    // 开始地址
    uint32_t base_addr;
    // 大小
    uint32_t size;
} mcu_sram_nor_t;

// @brief 初始化 SRAM/PSRAM/NOR
std_err_t mcu_sram_nor_init(mcu_sram_nor_t *sram);

// @brief 测试 SRAM/PSRAM/NOR
std_err_t mcu_sram_nor_test(mcu_sram_nor_t *sram);
